﻿// using System.Collections;
// using FlowCanvas;
// using FlowCanvas.Nodes;
// using LogSystem;
// using ParadoxNotion.Design;
// using UnityEngine;
// using Yoozoo.Gameplay.Liberty;
//
// namespace Yoozoo.Gameplay.Liberty.Nodes
// {
//     [Category("Ggame")][Description("相机看向指定位置")]
//     public class CameraLookAt : LatentActionNodeBase
//     {
//         private float _duration;
//         private float _totalTime;
//
//         public IEnumerator Invoke(string pointName,Vector3 lookPos, float duration)
//         {
//             _duration = duration;
//             _totalTime = duration;
//             Camera camera = BlueprintUtils.GetPlayerCamera();
//
//             if (pointName!=null)
//             {
//                 pointName = pointName.Trim();
//                 if (!string.IsNullOrEmpty(pointName))
//                 {
//                     lookPos = BlueprintUtils.GetBlueprintPoint(pointName).position;
//                 }
//             }
//
//             if (duration < 0.001f)
//             {
//                 camera.transform.LookAt(lookPos);
//                 yield break;
//             }
//             else
//             {
//                 Quaternion lookQuaternion =
//                     Quaternion.LookRotation(lookPos - camera.transform.position);
//                 Quaternion origin = camera.transform.rotation;
//                 while (true)
//                 {
//                     _duration -= Time.deltaTime;
//                     float t = 1 - (_duration / _totalTime);
//                     t = Mathf.Max(0, t);
//                     camera.transform.rotation =
//                         Quaternion.Slerp(origin, lookQuaternion,t);
//                     
//                     if (_duration <= 0) {
//                         yield break;
//                     }
//                     else {
//                         yield return null;
//                     }
//                 }
//             }
//             
//         }
//
//         protected override void OnRegisterDerivedPorts(FlowNode node)
//         {
//             var p1 = node.AddValueInput<string>(parameters[0].Name);
//             var p2 = node.AddValueInput<Vector3>(parameters[1].Name);
//             var p3 = node.AddValueInput<float>(parameters[2].Name);
//             
//             node.AddFlowInput("In", (f) => { Begin(Invoke(p1.value,p2.value,p3.value), f); });
//         }
//     }
// }